home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1990-12-11 | 6.0 KB | 194 lines |
- DEFINITION MODULE Terminal;
-
- (*
- * Dieses Modul stellt Funktionen zur Ausgabe auf den Bildschirm bzw. Eingabe
- * von der Tastatur zur Verfügung.
- *
- * Sollen Zahlen ein- oder ausgegeben werden, sind dazu die hiesigen Proze-
- * duren 'ReadString' und 'WriteString' sowie die String-Umwandlungsfunktio-
- * nen des Moduls 'StrConv' zu benutzen.
- *
- * Zur Ein-/Ausgabe werden normalerweise die BIOS-Funktionen des Atari be-
- * nutzt, die standardmäßig auf die Treibervariablen in 'TermBase' zugewiesen
- * sind.
- * Deshalb sind auch die VT-52 Steuerzeichen verwendbar. Z.B. wird der Bild-
- * schirm mit den Aufrufen 'Write (33C) (* ESC *); Write ("S")' gelöscht
- * (siehe auch Funktion 'WritePg' und Modul 'VT52').
- *
- * Zu Beginn wird der Cursor einmalig ausgeschaltet.
- * Die Funktionen 'Read', 'ReadString', 'ReadToken' und 'ReadLine' schalten
- * den Cursor bei Erwarten eines Zeichens ein und am Ende wieder aus, die
- * anderen Funktionen verändern den Cursorstatus nicht.
- *)
-
- FROM SYSTEM IMPORT LONGWORD;
-
- FROM MOSGlobals IMPORT Key;
-
-
- VAR Done: BOOLEAN;
- (*
- * Ist FALSE nach Aufrufen der String-Eingabefunktionen (Read...,
- * Edit...), wenn Undo gedrückt wurde.
- * Hat keine Wirkung bei Einzel-Eingaben, wie Read, BusyRead, usw.
- *)
-
-
- PROCEDURE NumRows (): CARDINAL;
- (*
- * Liefert Zeilenanzahl (normalerweise 25)
- *)
-
- PROCEDURE NumCols (): CARDINAL;
- (*
- * Liefert Spaltenanzahl (normalerweise entweder 80 oder 40)
- *)
-
-
- (*
- * Ausgabe-Funktionen
- * ------------------
- *)
-
- PROCEDURE Write (ch: CHAR);
- (* Ausgabe eines Zeichens, Controlzeichen werden ausgewertet. *)
-
- PROCEDURE WriteString (REF str: ARRAY OF CHAR);
- (* Ausgabe eines Strings, Controlzeichen werden ausgewertet. *)
-
- PROCEDURE WriteCtrl (ch: CHAR);
- (* Ausgabe eines Zeichens, Controlzeichen werden angezeigt. *)
-
- PROCEDURE WriteCtrlString (REF str: ARRAY OF CHAR);
- (* Ausgabe eines Strings, Controlzeichen werden angezeigt. *)
-
- PROCEDURE WriteLn;
- (* Ausgabe eines CR / LF. (Sprung in nächste Zeile) *)
-
- PROCEDURE WritePg;
- (* Löscht Bildschirm. *)
-
- PROCEDURE GotoXY (col, row: CARDINAL);
- (*
- * Setzt Cursor auf Spalte 'col', Zeile 'row'.
- * Links oben ist (0,0). Wenn 'row' oder 'col' außerhalb des Bildschirms
- * liegen, ist die Positionierung undefiniert.
- *)
-
- PROCEDURE GotoRowCol (row, col: CARDINAL);
- (*
- * Setzt Cursor auf Spalte 'col', Zeile 'row'.
- * Links oben ist (0,0). Wenn 'row' oder 'col' außerhalb des Bildschirms
- * liegen, ist die Positionierung undefiniert.
- *)
-
-
- (*
- * Eingabe-Funktionen
- * ------------------
- *
- * Es gibt grundsätzlich zwei verschiedene Eingabeverfahren:
- * Gepuffert und ungepuffert.
- * <Ungepuffert> bedeutet, daß bei einem Aufruf einer Read-Funktion
- * immer das Programmablauf gestoppt wird, damit der Anwender ein Zeichen
- * oder auch einen String eingeben kann.
- * Bei <gepufferter> Eingabe wird intern immer eine ganze Eingabezeile
- * gepuffert und dann werden bei Aufruf der Read-Funktionen so lange
- * die Zeichen und Strings aus diesem Puffer geholt, bis der Puffer
- * geleert ist. Erst dann wird der Programmlauf gestoppt, um die Eingabe
- * einer neuen Zeile zu ermöglichen.
- *
- * Nicht alle Read-Funktionen sind von dieser Pufferung berührt:
- * 'ReadLine' liest sowieso immer eine ganze Zeile, sodaß der Puffer
- * immer gleich wieder geleert wird.
- *)
-
- PROCEDURE Read (VAR ch: CHAR);
- (*
- * Zeichen wird erwartet und wieder ausgegeben, falls es kein
- * Control-Zeichen ist.
- *)
-
- PROCEDURE GetChar (VAR k: CHAR);
- (*
- * Liest Taste ohne Echo (keine Ausgabe des Zeichens)
- *)
-
- PROCEDURE GetKey (VAR k: Key);
- (*
- * Liest Taste (kein Echo!) und liefert neben dem Zeichen-Wert auch
- * den Scancode (ggf. auch den Sondertastenstatus, falls Bit 3 in der
- * Systemvariablen 'conterm' (siehe Module 'KbdCtrl' & 'SysVars')
- * gesetzt ist).
- *)
-
- PROCEDURE CondRead (VAR ch: CHAR; VAR success: BOOLEAN);
- (*
- * Falls Zeichen von Tastatur ansteht, wird es 'ch' zugewiesen und
- * 'success' liefert TRUE, ansonsten ist 'ch' = 0C und 'success' ist
- * FALSE. Kein Echo des eingegebenen Zeichens !
- *)
-
- PROCEDURE BusyRead (VAR ch:CHAR);
- (*
- * Wenn Taste gedrückt, wird Zeichen in 'ch' geliefert, sonst wird 0C
- * in 'ch' geliefert.
- * Kein Echo des eingegebenen Zeichens !
- *)
-
- PROCEDURE KeyPressed (): BOOLEAN;
- (* Liefert TRUE, wenn Taste gedrückt wurde. *)
-
- PROCEDURE FlushKbd;
- (* Löscht den Tastaturpuffer. *)
-
-
- PROCEDURE UndoRead;
- (*
- * Auch "ReadAgain" in anderen Dialekten:
- * Das zuletzt gelesene Zeichen wird bei der nächsten Abfrage
- * nochmal geliefert.
- *)
-
-
- PROCEDURE ReadLine (VAR str: ARRAY OF CHAR);
- (*
- * Ein String kann frei eingegeben werden. Ende durch Return bzw. Enter.
- * Abbruch mit Undo-Taste - dann wird ein Leerstring in 'str' geliefert
- * und 'Done' ist FALSE.
- * Es können nur soviele Zeichen eingegeben werden, wie 'str' fassen kann.
- *)
-
- PROCEDURE ReadCtrlLine (VAR str: ARRAY OF CHAR);
- (*
- * Wie ReadLine, es können aber auch die Control-Zeichen eingegeben werden.
- *)
-
- PROCEDURE EditLine (VAR str: ARRAY OF CHAR);
- (*
- * Wie ReadLine, jedoch muß 'str' schon beim Aufruf einen String
- * enthalten, der dann angezeigt und editiert werden kann.
- *)
-
- PROCEDURE EditCtrlLine (VAR str: ARRAY OF CHAR);
- (*
- * Wie EditLine, es können aber auch die Control-Zeichen editiert werden.
- *)
-
- PROCEDURE ReadToken (VAR str: ARRAY OF CHAR);
- (*
- * Wie ReadLine, jedoch kann nur ein Wort ("Token") eingeben werden:
- * Führende Leerzeichen (und Control-Zeichen) werden ignoriert,
- * nach Eingabe eines gültigen Zeichens wird beim nächsten Leer- oder
- * Control-Zeichen die Eingabe beendet.
- * Das Terminierungszeichen kann durch Aufrufe von
- * 'UndoRead' und 'Read' ermittelt werden.
- *)
-
- PROCEDURE ReadString (VAR str: ARRAY OF CHAR);
- (*
- * Identisch mit 'ReadLine'.
- *)
-
- END Terminal.
-